import { reqLogin, reqGetProfile, reqGetBaseInfo } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'

const state = {
  token: getToken() || '',
  userInfo: {}
}
const mutations = {
  setToken(state, newToken) {
    state.token = newToken
    setToken(newToken)
  },
  removeToken(state) {
    state.token = ''
    removeToken()
  },

  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {

  async login(context, data) {
    // 1. 发送请求，获取 token
    const res = await reqLogin(data)
    const newToken = res.data
    // 2. 提交mutation，将token存到state中
    context.commit('setToken', newToken)
    return res
  },

  // async 函数执行的结果，默认就直接是一个promise对象，帮你封装了一层
  async getUserInfo(context) {
    // 1. 发送请求获取到不带头像的个人信息
    const { data: data1 } = await reqGetProfile()
    // 2. 基于前面得到的结果，再发一个请求，获取带头像的信息
    const { data: data2 } = await reqGetBaseInfo(data1.userId)

    // 3. 将两次拿到的个人信息结果，进行合并
    const resultObj = {
      ...data1,
      ...data2
    }
    context.commit('setUserInfo', resultObj)
    return resultObj // 在 async 函数 return 结果，就等价于 resolve(结果)
  },

  // 提供一个退出的action
  logout(context) {
    context.commit('removeToken')
    context.commit('removeUserInfo')
  }

}
const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
